package com.guaoran.interview.spring.aop.controller;

import com.guaoran.interview.spring.aop.service.AopService;
import com.guaoran.interview.spring.aop.service.IDemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author : gucheng
 * @description : 测试aop ，springboot 2.x 默认使用cglib，可以使用spring.aop.proxy-target-class=false 来默认使用jdk
 * @desc : 原因1：jdk 不能动态代理接口的实现类， 只能代理接口。
 * @date :2019/12/26 20:35
 */
@RestController
public class AopController {
    @Autowired
    private AopService aopService;
    // 针对接口的代理，spring默认是jdk， 在springboot2中默认是cglib ，
    @Autowired
    private IDemoService demoService;

    // spring boot 中为什么默认使用cglib 进行代理
    // 原因1： 针对接口的代理时可以的，但是针对实现类进行代理时会报错,但在cglib中是可以的。
//    @Autowired
//    private DemoService demoService2;

    /**
     * cglib 不能对final 修饰的类进行代理，在jdk中是直接编译报错，
     */
//    @Autowired
//    private AopFinalService aopFinalService;

    @GetMapping("/aop")
    public String aop() throws Exception {
        demoService.demo();
        String aop = aopService.aopTest("aop");
        System.out.println();
        System.out.println();
        aopService.aopThrow();
        System.out.println();
        System.out.println();
        aopService.aopThrow2();




//        aopFinalService.testFinal();
        return aop;
    }
}
